草庐IT

Android Proguard 不内联

全部标签

c++ - 将内联函数作为参数传递

我想知道当函数作为参数传递时,C++是否仍会遵守inline关键字。在下面的示例中,每次在while循环中调用frame()时,是否会将onFrame的新帧压入堆栈?boolinterrupt=false;voidrun(std::functionframe){while(!interrupt)frame();}inlinevoidonFrame(){//dosomethingeachframe}intmain(){run(onFrame);}或者改成这个会有什么影响吗?voidrun(std::functionframe){while(!interrupt)frame();}如果你没

c++ - 为什么 gcc 不为我决定内联或不内联这个功能?

从网上的一些话我知道GCC很聪明,可以决定是否内联一个函数。inline关键字只是一个提示:GCC可以内联一个普通函数,而不能内联一个内联函数。但是对于我项目中的这个功能:structvb_pos{union{struct{intoffset;intl;};unsignedlonglongg_offset;};};staticinlinevoidvi_write_vtail_smart(structvi*vi){structvb_pos*vhead,*vtail,*cursor;vhead=&vi->v_head;vtail=&vi->v_tail;cursor=&vi->cursor

c++ - 在模板特化的情况下,是否允许编译器忽略内联?

假设您有一个简单的模板函数(为了简单起见,不是类成员),在同一个.h文件中具有特定于类型的特化...templatevoidsome_function(TYPE&val){//somegenericimplementation}templateinlinevoidsome_function(int&val){//someintspecificimplementation}除非您明确指示编译器inline特化(inline关键字),否则如果.h文件被多次包含(至少我是这样),您将收到链接错误在VisualC++2008中)。我们都知道inline只是给编译器的一个建议,它可以忽略。在这种

c++ - 内联函数

我知道编译器可能会也可能不会执行函数的内联扩展,无论程序员是否要求。我只是想知道,有没有什么方法可以让程序员确定编译器已经内联了一个特定的函数? 最佳答案 除了查看生成的代码,没有。一些实现可能会提供该信息,但标准并不要求它。inline或register(不寒而栗)之类的东西是对编译器的建议,它可以自由地接受它们、忽略它们甚至撒谎你说它已经完成了,同时偷偷地在你背后而不是这样做:-)我倾向于不使用这样的功能,因为我怀疑编译器通常比我更了解如何从我的代码中获得最大性能。 关于c++-内联

c++ - C++ 中的内联函数

你好,我是C++的新手。我确实阅读了有关内联函数的内容并正确理解了它们。但是this网站说“如果我们在一个.cpp文件中编写内联函数的定义并从另一个文件调用它,我们会收到‘Unresolvedexternal’错误……为什么会这样……?这可以用于正常功能,正确...如果我错了请纠正我...谢谢 最佳答案 这是语言要求。inline意味着您可能在多个翻译单元中定义了函数,但定义必须相同并且您必须在每个使用该函数的翻译单元。这是规则。规则允许(但不要求)编译器在每个调用点扩展inline函数的代码,并忽略发出可调用函数版本。这与非内联函

c++ - MSVC - 有什么方法可以检查函数是否实际上是内联的?

我必须检查一个函数是否被编译器内联。有没有办法不看汇编(我不读)就可以做到这一点。我没有办法解决这个问题,所以我宁愿我们不能讨论这样做的智慧。谢谢! 最佳答案 如果您启用警告C4714、C4710和C4711,它应该会为您提供有关哪些函数是内联的和未内联的相当详细的信息。 关于c++-MSVC-有什么方法可以检查函数是否实际上是内联的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question

【C++航海王:追寻罗杰的编程之路】引用、内联、auto关键字、基于范围的for、指针空值nullptr

目录1->引用1.1->引用概念1.2->引用特性 1.3->常引用1.4->使用场景1.5->传值、传引用效率比较1.6->值和引用作为返回值类型的性能比较1.7->引用和指针的区别2->内联函数2.1->概念2.2->特性3->auto关键字(C++11)3.1->类型别名思考3.2->auto简介3.3->auto的使用细则3.4->auto不能推导的场景4->基于范围的for循环(C++11)4.1->范围for的语法4.2->范围for的使用条件5->指针空值nullptr(C++11)5.1->C++98中的指针空值1->引用1.1->引用概念引用不是新定义一个变量,而是给已经存在

c++ - 在源文件中内联

我有一个包含很多实用函数的大类。这些函数非常小,我希望它们内联。问题是它们都在一个源文件中,应该留在源文件中而不是移动到头文件中(所以我不需要每次更改都重新编译所有内容)。如果我将它们标记为内联,我会得到symbolsnotfound有没有办法让它们内联,或者我是否需要盲目信任链接时间优化器?我需要代码可以在clang3和gcc4.6之间移植,但是基于编译器的#define是可以的(所以回答如何只在一个编译器中做它也很好)。 最佳答案 [These]functionsareverysmallandIwouldliketheminli

c++ - 在 C++ 内联汇编中定义一个变量

假设我们有以下C++代码:intvar1;__asm{movvar1,2;}现在,我想知道的是,如果我不想在__asm指令之外定义var1,我必须做些什么才能将它放入其中。有可能吗?谢谢 最佳答案 为此,您需要使用_declspec(naked)创建一个“裸”方法,并自行编写通常由编译器创建的序言和结尾。序言的目的是:设置EBP和ESP为局部变量保留堆栈空间将需要修改的寄存器保存在函数体中结语必须:恢复保存的寄存器值清理局部变量的保留空间这是一个标准的序言pushebp;Saveebpmovebp,esp;Setstackframe

c++ - 如果函数内联过于激进会怎样?

每次我读到C++中的inline关键字时,都会有很长的解释说明编译器会进行“速度与代码量”分析,然后决定是否在每种特定情况下内联函数调用。现在VisualC++9有一个__forceinlinekeyword这似乎使编译器内联对函数的调用,除非这种内联是绝对不可能的(就像调用是虚拟的)。假设我在不了解其中内容的情况下浏览了一些项目,然后自己决定三分之一的函数足够小并且适合内联,并用__forceinline标记它们,编译器确实内联它们,现在可执行文件已经变大了一百倍。这真的很重要吗?过度内联函数并使可执行文件大一百倍,我应该期待什么效果? 最佳答案